package com.chaos.framework.starter.config;


import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.chaos.framework.model.enums.ResultEnum;
import com.chaos.framework.model.exception.BusinessException;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.stereotype.Component;
import net.sf.jsqlparser.expression.Expression;

import java.util.HashSet;
import java.util.Set;

@Component
public class MybatisPlusTenantHandler implements TenantLineHandler {

    private static final Set<String> IGNORED_TABLES = new HashSet<>();

    static {
        IGNORED_TABLES.add("oauth_client_details");
        IGNORED_TABLES.add("t_tenant");
        IGNORED_TABLES.add("rbac_menu");
        IGNORED_TABLES.add("rbac_permission");

    }

    @Override
    public Expression getTenantId() {
        // 假设有一个租户上下文，能够从中获取当前用户的租户
        Long tenantId = MybaitsPlusTenantContextHolder.getCurrentTenantId();
        // 返回租户ID的表达式，LongValue 是 JSQLParser 中表示 bigint 类型的 class
        if (tenantId == null) {
            throw new BusinessException(ResultEnum.NO_TENANT);
        }
        return new LongValue(tenantId);
    }

    @Override
    public String getTenantIdColumn() {
        return "tenant_id";
    }

    @Override
    public boolean ignoreTable(String tableName) {
        // 根据需要返回是否忽略该表
        return IGNORED_TABLES.contains(tableName.toLowerCase());
    }


}